package com.lyq;
/*
* 接口需要参数：
* 1、生成error参数的名称
* 2、查找文件的String
* */

import org.json.JSONArray;
import org.json.JSONObject;

import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.HashSet;

/**
 * 接口返回参数：
 * 1、生成成功：
 *    返回error文件绝对路径
 * 2、生成失败：
 *    返回NULL
 * */
public class errorGenerate {
    String errorFileName,urls;
    public errorGenerate(String errorFileName,String urls){
        this.errorFileName=errorFileName;
        this.urls=urls;
    }
    public String errorFile(){
        String url="";
        File file;
        JSONArray errorArray=new JSONArray();//错误文件
        try{ File tempFiles=new File(urls);
            url=tempFiles.getCanonicalPath();//获取当前相对地址+urls的地址
            System.out.println("文件地址获取成功!\n"+url);
        } catch (IOException e) {
            e.printStackTrace();
        }
        file=new File(url);
        if(!file.exists()){
            System.out.println(file.getPath()+"不存在");//判断文件夹内存不存在文件夹！
            return null;
        }
        File[] tempFile=file.listFiles();//存在文件夹就创建一个文件夹下的文件夹列表数组
        System.out.println("文件目录正常");
        for(int i=0;i<tempFile.length;i++){//当前在urls文件夹里面循环全部的文件夹
            if(!tempFile[i].isFile()) {//只要文件夹
//                System.out.println(tempFile[i].getPath());//开始进入到urls文件夹里的文件夹获取数据
                String fileAdreesName=tempFile[i].getPath();//url的获取
                errorPutList(errorArray,fileAdreesName);
            }
        }
        System.out.println("开始写入数据");
        jsonFileWrite errorFIleWrite=new jsonFileWrite(errorArray,errorFileName);
        return errorFIleWrite.FileWrite();
    }
    private void errorPutList(JSONArray errorArray,String url){
        int flag=0;//检查两对数据是否已加入
        HashSet<String> hashSet=new HashSet<String>();
        File file=new File(url);
        File[]fileList=file.listFiles();
        if(!file.exists()){
            System.out.println(file.getPath()+"文件夹不存在");
            return ;
        }else {//判断这个文件夹是否为空
            //获得文件的名字；
            for(File fileNameget:fileList){
                if(fileNameget.isFile()){//是文件
                    String name=fileNameget.getName();
                    int lastIndexName=name.lastIndexOf(".");
//                    System.out.println(lastIndexName);
                    if(lastIndexName==-1){//不是.xxx文件直接加入到error文件中！
                        JSONObject jNew=new JSONObject();
                        jNew.put("errorURL",fileNameget.getPath());
                        jNew.put("errormsg","文件类型错误:未知文件");
                        errorArray.put(jNew);
                    }else {
                        String lastName = name.substring(name.lastIndexOf(".") + 1);//获取文件的最后的标识
                        String headName = name.substring(0, name.lastIndexOf("."));
                        if (!hashSet.contains(headName)) {
                            hashSet.add(headName);

                        } else {
                            if(lastName.equalsIgnoreCase("json") || lastName.equalsIgnoreCase("jar")) {//只删去后缀为json和jar的文件
                                hashSet.remove(headName);//当重复了就删去重复的键值
                            }
                        }
//                        System.out.println(headName);
                    }
                }
            }//-------------------------------------------判断没有重复值的数据--=------------------------------------
//            for(String h:hashSet){
//                System.out.println("重复文件："+h);
//            }
            //--------------------------------------------判断文件是否重复后分配数据------------------------------------------------
            for(File fileListName:fileList) {
                if (fileListName.isFile()) {//==========================只检查文件======================
                    String name = fileListName.getName();
                    int lastIndexName = name.lastIndexOf(".");
                    if (!(lastIndexName == -1)) {//=====================只查询有后缀的文件===========
                        String lastName = name.substring(lastIndexName + 1);//获取文件的后缀
                        String headName = name.substring(0, lastIndexName);//获取文件名
                        String path = fileListName.getPath();
                        if (hashSet.contains(headName)) {//=========存在这个数说明不是重复的就是error========
                            if(lastName.equalsIgnoreCase("json")||lastName.equalsIgnoreCase("jar")){
                                //-------------------------------查找是json或jar文件但没有匹配对数的值---------------------------------------
//                                System.out.println("error文件：" + name);
                                JSONObject jNew = new JSONObject();
                                jNew.put("errorURL", path);
                                jNew.put("errormsg", "未找到匹配文件: ."+lastName);
                                errorArray.put(jNew);
                            }else{
                                //---------------------------其他类型----------------------------
//                                System.out.println("error文件：" + name);
                                JSONObject jNew = new JSONObject();
                                jNew.put("errorURL", path);
                                jNew.put("errormsg","此文件类型错误:."+lastName);
                                errorArray.put(jNew);
                            }
                        }
                    }
                }
            }
//            System.out.println("数据写入完成");//-----------------------------------------------for结束-----------------------------------------
        }
    }
}
